package linkedlist.delete;

import linkedlist.Node;

/**
 * @Author wangtengyu
 * @Create 2018-09-03-11:27 在一个链表中，删除数据为x的节点,head指向头节点，是最后要返回的
 */
public class LoopDeletor {


  public <T> Node<T> deleteValue(Node head, T value) {

    //特殊情况1，head为null
    if (head == null) {
      return null;
    }

    //特殊情况2,head的值就是要删除的值，head的指向要移动
    //循环判断是因为有 2，2,2,3,4，这种情况
    while (head.getData() == value) {
      head = head.getNext();
    }

    Node prev = head;

    //到此处，head的值等于value的已经删除完毕了
    while (prev.getNext() != null) {//说明不是最后一个
      if (prev.getNext().getData() == value) {
        prev.setNext(prev.getNext().getNext());
      } else {
        prev = prev.getNext();
      }
    }

    return head;
  }
}
